package com.katze.boot.common.config.actuator;

import com.katze.boot.common.config.actuator.endpoint.HttpTraceEndpoint;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
import org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository;
import org.springframework.boot.actuate.web.exchanges.InMemoryHttpExchangeRepository;
import org.springframework.context.annotation.Bean;

/**
 * 说  明：端点 httptrace
 * @v1 Spring Boot 2.2.0中，默认情况下已删除该功能,需要提供一个HttpTraceRepository
 * @v2 spirngboot后续版本中是不能直接注入InMemoryHttpTraceRepository 开启，而且使用httpExchanges开启http trace记录。
 * spring boot http trace跟踪文档说明 简单解释为：开启http trace是存在性能问题的，建议在生产环境呢使用建议使用 生产就绪的跟踪或可观测性解决方案，如Zipkin或OpenTelemetry。或者，您可以创建自己的HttpExchangeRepository。
 * 自行开启HttpExchangeRepository功能
 * @v3 uri变更，由原来/httptrace 改成 /httpexchanges
 * @作  者：zf.zeng
 * @日  期：2020-08-08 (星期六)
 **/
@ConditionalOnAvailableEndpoint(HttpTraceEndpoint.class)
public class HttpTraceActuatorConfiguration {

    @Bean
    public HttpExchangeRepository httpTraceRepository() {
        InMemoryHttpExchangeRepository repository = new InMemoryHttpExchangeRepository();
        // 默认保存100条http请求记录
        repository.setCapacity(150);
        return repository;
    }

    @Bean
    public HttpTraceEndpoint httpTraceEndpoint(HttpExchangeRepository exchangeRepository) {
        return new HttpTraceEndpoint(exchangeRepository);
    }
}
